package com.guldan.mapper.db.mapper;

import com.guldan.jaina.dto.datastat.datav.DatavDTO;
import com.guldan.jaina.dto.datastat.datav.MetaDTO;
import com.guldan.jaina.dto.datastat.home.BatchRegistStatDTO;
import com.guldan.jaina.dto.datastat.home.HotProjectStatDTO;
import com.guldan.jaina.dto.datastat.home.Part1DTO;
import com.guldan.jaina.dto.datastat.home.Part2DTO;
import com.guldan.jaina.dto.datastat.report.MoneyStatDTO;
import com.guldan.jaina.dto.datastat.report.SubsidyGrantStatDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created by Silas.
 * Date: 2017/1/17
 * Time: 22:05
 */
public interface DataStatMapper {


    Part1DTO getPart1DTO(@Param("projectNumState") int projectNumState,
                         @Param("treatingNumStateBegin") int treatingNumStateBegin,
                         @Param("treatingNumStateEnd") int treatingNumStateEnd,
                         @Param("areaIds") List<Integer> areaIds);

    Part2DTO getPart2DTO(@Param("todoNumState") int todoNumState,
                         @Param("treatingAuditorNumStateBegin") int treatingAuditorNumStateBegin,
                         @Param("treatingAuditorNumStateEnd") int treatingAuditorNumStateEnd,
                         @Param("areaIds") List<Integer> areaIds);

    List<BatchRegistStatDTO> getBatchRegistStatByDate(@Param("rsStateBegin") int rsStateBegin,
                                                      @Param("rsStateNotEqual") int rsStateNotEqual,
                                                      @Param("prbStateBegin") int prbStateBegin,
                                                      @Param("dateBegin") String dateBegin,
                                                      @Param("dateEnd") String dateEnd,
                                                      @Param("areaIds") List<Integer> areaIds);

    List<HotProjectStatDTO> getHotProjectStatList(@Param("rsStateBegin") int rsStateBegin,
                                                  @Param("rsStateNotEqual") int rsStateNotEqual,
                                                  @Param("rowCount") int rowCount,
                                                  @Param("areaIds") List<Integer> areaIds);


    //数据可视化
    //补贴发放统计
    //金额统计
    List<MoneyStatDTO> getMoneyStat(@Param("dateBegin") String dateBegin,
                                    @Param("dateEnd") String dateEnd,
                                    @Param("areaIds") List<Integer> areaIds,
                                    @Param("projectIds") List<Integer> projectIds,
                                    @Param("states") List<Integer> states);

    //人次统计
    List<SubsidyGrantStatDTO> getPersonStat(@Param("dateBegin") String dateBegin,
                                            @Param("dateEnd") String dateEnd,
                                            @Param("areaIds") List<Integer> areaIds,
                                            @Param("projectIds") List<Integer> projectIds,
                                            @Param("states") List<Integer> states);

    //发放情况，按区划
    List<SubsidyGrantStatDTO> getSubsidyGrantStatForArea(@Param("dateBegin") String dateBegin,
                                                         @Param("dateEnd") String dateEnd,
                                                         @Param("areaIds") List<Integer> areaIds,
                                                         @Param("projectIds") List<Integer> projectIds,
                                                         @Param("states") List<Integer> states);

    //发放情况，按项目
    List<SubsidyGrantStatDTO> getSubsidyGrantStatForProject(@Param("dateBegin") String dateBegin,
                                                            @Param("dateEnd") String dateEnd,
                                                            @Param("areaIds") List<Integer> areaIds,
                                                            @Param("projectIds") List<Integer> projectIds,
                                                            @Param("states") List<Integer> states);

    //覆盖人次性别统计
    List<SubsidyGrantStatDTO> getGenderStat(@Param("dateBegin") String dateBegin,
                                            @Param("dateEnd") String dateEnd,
                                            @Param("areaIds") List<Integer> areaIds,
                                            @Param("projectIds") List<Integer> projectIds,
                                            @Param("states") List<Integer> states);

    //覆盖人次民族统计
    List<SubsidyGrantStatDTO> getNationStat(@Param("dateBegin") String dateBegin,
                                            @Param("dateEnd") String dateEnd,
                                            @Param("areaIds") List<Integer> areaIds,
                                            @Param("projectIds") List<Integer> projectIds,
                                            @Param("states") List<Integer> states);

    //受益年龄统计
    List<SubsidyGrantStatDTO> getBenefitAgeStat(@Param("dateBegin") String dateBegin,
                                                @Param("dateEnd") String dateEnd,
                                                @Param("areaIds") List<Integer> areaIds,
                                                @Param("projectIds") List<Integer> projectIds,
                                                @Param("states") List<Integer> states);

    //人员信息统计
    //性别统计
    List<SubsidyGrantStatDTO> getGenderStatForCitzen(@Param("areaIds") List<Integer> areaIds);

    //民族统计
    List<SubsidyGrantStatDTO> getNationStatForCitzen(@Param("areaIds") List<Integer> areaIds);

    //年龄结构
    List<SubsidyGrantStatDTO> getAgeStatForCitzen(@Param("areaIds") List<Integer> areaIds);

    //区划人数统计
    List<SubsidyGrantStatDTO> getAreaPersonStatForCitzen(@Param("areaIds") List<Integer> areaIds);


    //datav相关统计
    //人次，金额
    MetaDTO datav_getMoney(@Param("dateBegin") String dateBegin,
                           @Param("dateEnd") String dateEnd,
                           @Param("areaIds") List<Integer> areaIds);

    //人次，金额，按月
    List<MetaDTO> datav_getMoneyGroupByMonth(@Param("areaIds") List<Integer> areaIds);

    //热名项目关键词
    List<MetaDTO> datav_getHotProjectList(@Param("dateBegin") String dateBegin,
                                          @Param("dateEnd") String dateEnd,
                                          @Param("areaIds") List<Integer> areaIds);

    //年龄统计
    List<MetaDTO> datav_getBenefitAgeStat(@Param("dateBegin") String dateBegin,
                                          @Param("dateEnd") String dateEnd,
                                          @Param("areaIds") List<Integer> areaIds);


    //性别统计
    List<MetaDTO> datav_getGenderStat(@Param("dateBegin") String dateBegin,
                                      @Param("dateEnd") String dateEnd,
                                      @Param("areaIds") List<Integer> areaIds);

    //按年统计区域的金额
    List<MetaDTO> datav_getAreaYearDataByYear(@Param("year") int year);

    //按年统计类别的金额
    List<MetaDTO> datav_getCategoryYearDataByYear(@Param("year") int year);

    //某个时间段内，按项目类别统计发放金额
    List<MetaDTO> datav_getCategoryMoneyData(@Param("dateBegin") String dateBegin,
                                             @Param("dateEnd") String dateEnd,
                                             @Param("areaIds") List<Integer> areaIds);


    Double datav_getMoneySumByAreaYear(@Param("areaIds") List<Integer> areaIds, @Param("year") Integer year);

    Double datav_getMoneySumByCategoryYear(@Param("areaIds") List<Integer> areaIds, @Param("year") Integer year, @Param("project_category_id") Integer project_category_id);

}